Skip to main content

Terraform 究竟有何用

為什麼要用 Terraform?

  • 支援多個雲端平台,實現跨雲資源管理
  • 宣告式語言,直接定義基礎架構的模樣
  • 安裝 Client 能透過 API 來建置基礎架構
  • 不可變的基礎架構確保基礎設施的穩定
  • 開源專案,有社群參與跟廣大資源使用

Terraform 是如何運作的?

Terraform 透過應用程式介面 API 建立和管理雲端平台和其他服務上的資源。 提供者使 Terraform 能夠透過可存取的 API 與幾乎任何平台或服務配合使用。只要撰寫好 Terraform 腳本,一個鍵就可以達到你想要做的事情,簡單來說幫助你透過程式碼去管理這些雲端資源

核心 Terraform 工作流程由三個階段組成:

  • 寫入: 您定義資源,這些資源可能跨多個雲端提供者和服務。 例如,您可以建立配置,以在具有安全群組和負載平衡器的虛擬私有雲 (VPC) 網路中的虛擬機器上部署應用程式。
  • 計劃:Terraform 建立執行計劃,描述它將根據現有基礎架構和您的配置建立、更新或銷毀的基礎架構。
  • 應用: 獲得批准後,Terraform 將按照正確的順序執行建議的操作,並尊重任何資源依賴性。 例如,如果您更新 VPC 的屬性並更改該 VPC 中的虛擬機器數量,Terraform 將在擴展虛擬機器之前重新建立 VPC。

前面提過 Terraform 能夠在 AWS 上面建立 VPC、建立 EC2 伺服器、設定網路等等。那麼,它是如何連接 AWS 或者其他雲端平台的服務呢?

這些工作需要倚賴 Terraform 的兩個主要元件:Core,以及特定技術的提供者(providers)。

Core

Core 使用兩項資訊來決定它要執行哪些工作:

  • Terraform 組態檔:描述該做什麼、達成什麼狀態。
  • State:基礎設施目前的狀態。

Core 會根據組態檔描述的需求以及基礎設施當前的狀態來決定該做哪些事情。也就是說,持續比對需求與現狀,一旦發現二者有差異,便可執行必要的工作來讓基礎設施達到組態檔所描述的狀態。

基礎架構即程式碼 Infrastructure as Code

iaac.png

其概念是透過自動化工具以寫程式的方式建置基礎架構,不同於人工去一步一步的下指令,透過寫程式的方式讓你可以用各種處理程式碼的方式去對待基礎架構,使用基礎架構即程式碼能帶來以下好處

  • 能自動化建置基礎架構
  • 所有的變動都有記錄,更加透明化
  • 降低人為失誤風險,像是手誤刪除
  • 可以版本化去管理你的雲端服務
  • 透過腳本瞭解所使用的雲端與設定
  • 確保不同的環境都是相同雲端配置 (e.g Dev, Staging, Prod)
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "3.5.0"
}
}
}

provider "aws" {
profile = "default"
region = "ap-northeast-1"
}

resource "aws_instance" "example" {
ami = "ami-0461b11e2fad8c14a"
instance_type = "t2.micro"
}

使用 Kubernetes 帶來的好處

主題描述
管理任何基礎設施尋找您已在 https://registry.terraform.io/ 中使用的許多平台和服務的供應商。 您也可以https://developer.hashicorp.com/terraform/plugin。 Terraform 採用https://www.hashicorp.com/resources/what-is-mutable-vs-immutable-infrastruct,降低了升級或修改服務和基礎設施的複雜性。
追蹤您的基礎設施Terraform 會產生一個計劃並在修改基礎設施之前提示您批准。 它還在https://developer.hashicorp.com/terraform/language/state中追蹤您的真實基礎設施,該檔案充當您環境的事實來源。 Terraform 使用狀態檔案來決定對基礎架構進行的更改,以便它與您的配置相符。
自動更改Terraform 設定檔是聲明性的,這意味著它們描述了基礎架構的最終狀態。 您無需編寫逐步說明來建立資源,因為 Terraform 會處理底層邏輯。 Terraform 建立資源圖來決定資源依賴關係,並並行建立或修改非依賴資源。 這使得 Terraform 能夠有效地配置資源。
標準化配置Terraform 支援稱為https://developer.hashicorp.com/terraform/language/modules 的可重複使用配置組件,這些組件定義可配置的基礎設施集合,從而節省時間並鼓勵最佳實踐。 您可以使用 Terraform 註冊表中的公開可用模組,也可以編寫自己的模組。
協作由於您的設定寫入檔案中,因此您可以將其提交至版本控制系統(VCS) 並使用https://developer.hashicorp.com/terraform/intro/terraform-editions#terraform-cloud跨團隊有效管理 Terraform 工作流程。 Terraform Cloud 在一致、可靠的環境中運行 Terraform,並提供對共享狀態和秘密資料的安全存取、基於角色的存取控制、用於共享模組和提供者的私人註冊表等。
多雲部署跨多個雲端配置基礎架構可以提高容錯能力,從而可以從雲端供應商中斷中更順利地恢復。 然而,多雲部署增加了複雜性,因為每個提供者都有自己的介面、工具和工作流程。 Terraform 允許您使用相同的工作流程來管理多個提供者並處理跨雲端依賴項。 這簡化了大規模多雲基礎架構的管理和編排。
直接產生架構圖透過類似 Brainboard 服務創建架構圖
估計雲端使用費用嘗試使用https://developer.hashicorp.com/terraform/tutorials/cloud-get-started/cost-estimation教學來估算基礎設施變更的成本並定義策略來限製成本。
自動化生產技術文件透過 terraform-docs 生產技術文件,需要哪些 input 與產生哪些 output